﻿Imports CondorTravel.BC
Imports CondorTravel.BE
Imports CondorTravelUTIL.DL

Public Class RegistrarInforme
    Inherits PaginaBase

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            CargarPais()
            CargarCiudad(1) 'Peru: codPais = 1
        End If
    End Sub

    Protected Sub cboPais_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cboPais.SelectedIndexChanged
        If cboPais.SelectedIndex >= 0 Then
            CargarCiudad(cboPais.SelectedValue)
        End If
    End Sub

    Private Sub CargarCiudad(ByVal iCodigoPais As Integer)
        Dim objCiudadBC As New CiudadBC
        Dim objPais As New PaisBE
        objPais.Codigo = iCodigoPais

        Dim listaCiudad As New List(Of CiudadBE)

        Dim objCiudadSeleccione As CiudadBE = New CiudadBE
        objCiudadSeleccione.Codigo = 0
        objCiudadSeleccione.Descripcion = "[Seleccione]"
        listaCiudad.Add(objCiudadSeleccione)

        listaCiudad.AddRange(objCiudadBC.ListarCiudad(objPais))
        cboCiudad.DataSource = listaCiudad

        cboCiudad.DataValueField = "Codigo"
        cboCiudad.DataTextField = "Descripcion"
        cboCiudad.DataBind()
    End Sub

    Private Sub CargarPais()
        Dim objPaisBC As New PaisBC

        Dim listaPais As New List(Of PaisBE)

        Dim objPaisSeleccione As PaisBE = New PaisBE
        objPaisSeleccione.Codigo = 0
        objPaisSeleccione.Descripcion = "[Seleccione]"
        listaPais.Add(objPaisSeleccione)

        listaPais.AddRange(objPaisBC.ListarPais)
        cboPais.DataSource = listaPais

        cboPais.DataValueField = "Codigo"
        cboPais.DataTextField = "Descripcion"
        cboPais.DataBind()
    End Sub

    Protected Sub btnAddServicios_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnAddServicios.Click

        Dim item As New ListItem

        If txtServicios.Text.Trim() = String.Empty Then
            GeneraScriptAjax("alert('Servicio no válido');", "ServicioNoValido")
        Else
            item.Text = txtServicios.Text
            txtServicios.Text = String.Empty
            checkListaServicios.Items.Add(item)
            checkListaServicios.DataBind()
        End If

    End Sub

    Protected Sub btnDeleteServicios_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnDeleteServicios.Click

        If checkListaServicios.Items.Count = 0 Then
            GeneraScriptAjax("alert('No hay servicios para eliminar');", "NoServicios")
        ElseIf Not existenItemsSeleccionados(checkListaServicios) Then
            GeneraScriptAjax("alert('No existem servicios seleccionados');", "NoSeleccionados")
        Else
            eliminarItemsSeleccionados(checkListaServicios)
        End If

    End Sub

    Protected Sub btnAddFestividades_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnAddFestividades.Click
        Dim item As New ListItem

        If txtFestividades.Text.Trim() = String.Empty Then
            GeneraScriptAjax("alert('Festividad no válida');", "FestividadNoValida")
        Else
            item.Text = txtFestividades.Text
            txtFestividades.Text = String.Empty
            checkListaFestividades.Items.Add(item)
            checkListaFestividades.DataBind()
        End If
    End Sub

    Protected Sub btnDeleteFestividades_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnDeleteFestividades.Click

        If checkListaFestividades.Items.Count = 0 Then
            GeneraScriptAjax("alert('No hay festividades para eliminar');", "NoFestividades")
        ElseIf Not existenItemsSeleccionados(checkListaFestividades) Then
            GeneraScriptAjax("alert('No existem festividades seleccionadas');", "NoSeleccionados")
        Else
            eliminarItemsSeleccionados(checkListaFestividades)
        End If

    End Sub

    Protected Sub btnAddTramites_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnAddTramites.Click
        Dim item As New ListItem

        If txtTramites.Text.Trim() = String.Empty Then
            GeneraScriptAjax("alert('Tramite no válido');", "TramiteNoValido")
        Else
            item.Text = txtTramites.Text
            txtTramites.Text = String.Empty
            checkListaTramites.Items.Add(item)
            checkListaTramites.DataBind()
        End If
    End Sub

    Protected Sub btnDeleteTramites_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnDeleteTramites.Click

        If checkListaTramites.Items.Count = 0 Then
            GeneraScriptAjax("alert('No hay tramites para eliminar');", "NoTramites")
        ElseIf Not existenItemsSeleccionados(checkListaTramites) Then
            GeneraScriptAjax("alert('No existem tramites seleccionados');", "NoSeleccionados")
        Else
            eliminarItemsSeleccionados(checkListaTramites)
        End If

    End Sub

#Region "Metodos para manejar los objetos CheckBoxList"

    Private Function existenItemsSeleccionados(ByVal checkList As CheckBoxList) As Boolean

        Dim seleccionados As Integer = 0

        For i As Integer = 0 To checkList.Items.Count - 1 Step 1
            If checkList.Items(i).Selected Then
                Return True
            End If
        Next

        Return False
    End Function

    Private Sub eliminarItemsSeleccionados(ByVal checkList As CheckBoxList)

        For i As Integer = checkList.Items.Count - 1 To 0 Step -1

            If checkList.Items(i).Selected Then
                checkList.Items.RemoveAt(i)
            End If
        Next

    End Sub

#End Region

    Protected Sub btnGrabar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGrabar.Click

        If ValidarFormulario() Then
            RegistrarInformeCampo(Constantes.EstadoGrabadoInformeCampo)
        End If

    End Sub

    Protected Sub btnEnviar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnEnviar.Click

        If ValidarFormulario() Then
            RegistrarInformeCampo(Constantes.EstadoEnviadoInformeCampo)
        End If

    End Sub

    Private Function ValidarFormulario() As Boolean

        If txtSupervisor.Text.Trim = String.Empty Then
            Alerta("Debe ingresar el Supervisor", False, String.Empty)
            Return False
        ElseIf cboPais.SelectedIndex = 0 Then
            Alerta("Debe seleccionar el pais", False, String.Empty)
            Return False
        ElseIf cboCiudad.SelectedIndex = 0 Then
            Alerta("Debe seleccionar la ciudad", False, String.Empty)
            Return False
        ElseIf txtReferencia.Text.Trim = String.Empty Then
            Alerta("Debe ingresar la referencia", False, String.Empty)
            Return False
        ElseIf txtCantidadHospedajes.Text.Trim = String.Empty Then
            Alerta("Debe ingresar la cantidad de hospedajes", False, String.Empty)
            Return False
        ElseIf txtCantidadRestaurantes.Text.Trim = String.Empty Then
            Alerta("Debe ingresar la cantidad de restaurantes", False, String.Empty)
            Return False
        ElseIf txtTransporte.Text.Trim = String.Empty Then
            Alerta("Debe ingresar el transporte", False, String.Empty)
            Return False
        ElseIf txtObservaciones.Text.Trim = String.Empty Then
            Alerta("Debe ingresar las observaciones", False, String.Empty)
            Return False
        ElseIf checkListaServicios.Items.Count = 0 Then
            Alerta("Debe ingresar los servicios", False, String.Empty)
            Return False
        ElseIf checkListaFestividades.Items.Count = 0 Then
            Alerta("Debe ingresar las festividades", False, String.Empty)
            Return False
        ElseIf checkListaTramites.Items.Count = 0 Then
            Alerta("Debe ingresar los tramites y/o festividades", False, String.Empty)
            Return False
        End If

        Return True
    End Function

    Private Sub CargarDetalle(ByVal checkListaDetalle As CheckBoxList, ByRef listaDetalle As List(Of DetalleInformeCampoBE))

        Dim strUsuario As String = CType(Session("usuario"), UsuariosBE).CodUsuario
        Dim objDetalleInformeCampo As DetalleInformeCampoBE

        For i As Integer = 0 To checkListaDetalle.Items.Count - 1 Step 1

            objDetalleInformeCampo = New DetalleInformeCampoBE
            objDetalleInformeCampo.Descripcion = checkListaDetalle.Items(i).Value

            Select Case checkListaDetalle.ClientID
                Case "contenidoModulo_checkListaServicios"
                    objDetalleInformeCampo.TipoDetalle = Constantes.TipoDetalleServicio
                Case "contenidoModulo_checkListaFestividades"
                    objDetalleInformeCampo.TipoDetalle = Constantes.TipoDetalleFestividad
                Case "contenidoModulo_checkListaTramites"
                    objDetalleInformeCampo.TipoDetalle = Constantes.TipoDetalleTramite
            End Select

            listaDetalle.Add(objDetalleInformeCampo)
        Next

        

    End Sub

    Private Sub RegistrarInformeCampo(ByVal estado As String)
        Dim objInformeCampoBC As New InformeCampoBC
        Dim objInformeCampo As New InformeCampoBE
        Dim strUsuario As String = CType(Session("usuario"), UsuariosBE).CodUsuario

        objInformeCampo.Supervisor = txtSupervisor.Text.Trim
        objInformeCampo.Ciudad.Codigo = cboCiudad.SelectedValue
        objInformeCampo.CantidadHospedajes = CInt(txtCantidadHospedajes.Text.Trim)
        objInformeCampo.CantidadRestaurantes = CInt(txtCantidadRestaurantes.Text.Trim)
        objInformeCampo.Transporte = txtTransporte.Text.Trim
        objInformeCampo.Referencia = txtReferencia.Text.Trim
        objInformeCampo.Observaciones = txtObservaciones.Text.Trim
        objInformeCampo.Estado = estado
        objInformeCampo.Usuario = strUsuario

        Dim listaDetalle As New List(Of DetalleInformeCampoBE)

        CargarDetalle(checkListaServicios, listaDetalle)
        CargarDetalle(checkListaFestividades, listaDetalle)
        CargarDetalle(checkListaTramites, listaDetalle)

        objInformeCampo.ListaDetalle = listaDetalle

        Dim bExito As Boolean = False
        Dim sMensaje As String = String.Empty

        objInformeCampoBC.InsertaInformeCampo(objInformeCampo, bExito, sMensaje)

        If Not bExito Then
            lblMensaje.Text = "Error: Hubo un problema al registrar el informe de campo."
            limpiarFormulario()
        Else
            Alerta("El informe de campo se registro satisfactoriamente", True, "InformeCampo.aspx")
        End If
    End Sub

    Private Sub limpiarFormulario()

        txtSupervisor.Text = String.Empty
        cboPais.SelectedIndex = 0
        cboCiudad.SelectedIndex = 0
        txtReferencia.Text = String.Empty
        txtCantidadHospedajes.Text = String.Empty
        txtCantidadRestaurantes.Text = String.Empty
        txtTransporte.Text = String.Empty
        txtObservaciones.Text = String.Empty
        checkListaServicios.Items.Clear()
        checkListaFestividades.Items.Clear()
        checkListaTramites.Items.Clear()

    End Sub

End Class